/*
 * @Descripttion: 
 * @Author: ziwei
 * @Date: 2022-08-14 11:56:09
 * @LastEditors: ziwei
 * @LastEditTime: 2022-08-14 14:27:34
 */

//1 原型链继承+++++++++++++++
//缺点：引用类型的属性被所有实例共享
function Parent () {
    this.name = 'kevin';
}
Parent.prototype.getName = function () {
    console.log(this.name);
}
function Child () {
}

console.log(new Parent());
Child.prototype = new Parent();
var child1 = new Child();
console.log(child1.getName()) // kevin

//2 借用构造函数(经典继承)
/**
 * @msg: 5 寄生式继承
 * @param {*} o
 * @return {*} 
 * 缺点：跟借用构造函数模式一样，每次创建对象都会创建一遍方法
 */
function createObj(o){
    var clone = Object.create(o)
    clone.sayName = function(){
        console.log('h1')
    }
    return clone
}
/**
 * 6. 寄生组合式继承
 * 缺点：就是会调用两次父构造函数
 * 一次是设置子类型的原型的时候 Child.prototype = new Parent()
 * 一次在创建子类型实例的时候 var child1 = new Child('kevin','18')
 * 这种方式的高效率体现它只调用了一次Parent构造函数，并且因此避免了Parent.prototype上面创建不必要的多余的属性
 * 与此同时，原型链还能保持不变，因为还能正常使用instanceof和isProtypePf。开发人员普遍认为寄生组合式继承是引用类型最理想的继承范式
 */